#include <iostream>
#include <mutex>
#include <thread>
#include <map>

std::mutex mtx;  // 全局锁
std::map<int, int> data;  // 模拟共享资源

void Flush() {
    std::lock_guard<std::mutex> lock(mtx);  // 尝试加锁
    std::cout << "Flush: Acquired lock\n";

    // 模拟访问共享数据
    for (const auto& [key, value] : data) {
        std::cout << "Key: " << key << ", Value: " << value << "\n";
    }

    data.clear();  // 清空共享资源
    std::cout << "Flush: Cleared data\n";
}

void AddDataAndFlush() {
    // 外部持有锁
    std::lock_guard<std::mutex> lock(mtx);  // 外部加锁
    std::cout << "AddDataAndFlush: Acquired lock\n";

    // 修改共享数据
    data[1] = 100;
    data[2] = 200;

    // 内部调用 Flush，尝试再次加锁
    Flush();
}

int main() {
    std::thread t1(AddDataAndFlush);

    t1.join();
    return 0;
}
